package com.xunge.mapper;

import com.xunge.pojo.Course;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface CourseMapper {

    /**
     * 分页查询课程信息
     */
    List<Course> list(String name, String code, Integer status);

    /**
     * 新增课程
     */
    @Insert("insert into course(name, code, credit, hours, description, status, create_time, update_time) " +
            "values(#{name}, #{code}, #{credit}, #{hours}, #{description}, #{status}, now(), now())")
    void insert(Course course);

    /**
     * 根据ID查询课程
     */
    @Select("select * from course where id = #{id}")
    Course getById(Integer id);

    /**
     * 根据ID修改课程
     */
    void update(Course course);

    /**
     * 根据ID删除课程
     */
    @Delete("delete from course where id = #{id}")
    void deleteById(Integer id);

    /**
     * 批量删除课程
     */
    void deleteByIds(List<Integer> ids);

    /**
     * 查询所有课程
     */
    @Select("select * from course where status = 1")
    List<Course> listAll();

    /**
     * 根据课程名称查询课程（用于检查重复）
     */
    @Select("select * from course where name = #{name} and id != #{excludeId}")
    Course findByName(String name, Integer excludeId);

    /**
     * 根据课程代码查询课程（用于检查重复）
     */
    @Select("select * from course where code = #{code} and id != #{excludeId}")
    Course findByCode(String code, Integer excludeId);

    /**
     * 检查课程名称是否存在（新增时使用）
     */
    @Select("select count(*) from course where name = #{name}")
    int countByName(String name);

    /**
     * 检查课程代码是否存在（新增时使用）
     */
    @Select("select count(*) from course where code = #{code}")
    int countByCode(String code);

    /**
     * 检查课程在班级课程关联表中的使用情况
     */
    @Select("select count(*) from clazz_course where course_id = #{courseId}")
    int countClazzCourseUsage(Integer courseId);

    /**
     * 检查课程在考勤表中的使用情况
     */
    @Select("select count(*) from attendance where course_id = #{courseId}")
    int countAttendanceUsage(Integer courseId);

    /**
     * 检查课程在考试表中的使用情况
     */
    @Select("select count(*) from exam where course_id = #{courseId}")
    int countExamUsage(Integer courseId);

    /**
     * 检查课程在作业表中的使用情况
     */
    @Select("select count(*) from homework where course_id = #{courseId}")
    int countHomeworkUsage(Integer courseId);

    /**
     * 检查课程在成绩表中的使用情况
     */
    @Select("select count(*) from grade where course_id = #{courseId}")
    int countGradeUsage(Integer courseId);

    List<String> getNamesByIds(List<Integer> relatedIds);
}